﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CANO.Data.DAOs;

namespace CANO.WebSite.Compromisos
{
	public partial class Compromisos : System.Web.UI.Page
	{
		List<CompromisoDAO> ListCompartirCon = new List<CompromisoDAO>();
		List<CompromisoDAO> ListCompartirConEntrevista = new List<CompromisoDAO>();
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!Page.IsPostBack)
			{
				//Set Session variables
				Session["currentModule"] = "Compromisos";
				Session["ListCompartidoCon"] = ListCompartirCon;
				Session["ListCompartirConEntrevista"] = ListCompartirConEntrevista;
				//Fill Data
				this.fillDropDowns();
			}
			//Bind Events buttons
			btnGenerarCompromiso.Click += new EventHandler(btnGenerarCompromiso_Click);
			btnGenerarEntrevista.Click += new EventHandler(btnGenerarEntrevista_Click);
			btnCompartirCon.Click += new EventHandler(btnCompartirCon_Click);
			btnCompartirEntrevista.Click += new EventHandler(btnCompartirEntrevista_Click);

			ListCompartirCon = (List<CompromisoDAO>)Session["ListCompartidoCon"];
			ListCompartirConEntrevista = (List<CompromisoDAO>)Session["ListCompartirConEntrevista"];
		}

		void btnCompartirEntrevista_Click(object sender, EventArgs e)
		{
			int type = Convert.ToInt32(this.hiddenType.Value);
			string userID = ddlCompartirConEntrevista.SelectedValue;

			CompromisoDAO compromiso = new CompromisoDAO() { TipoCompromiso = type, UsuarioResponsable = Convert.ToInt32(userID) };
			ListCompartirConEntrevista.Add(compromiso);
			Session["ListCompartirConEntrevista"] = ListCompartirConEntrevista;
			ddlCompartirConEntrevista.Items.Remove(ddlCompartirConEntrevista.SelectedItem);

            litCompartidoEntrevista.Text += "<div class='compratido-con-user'>- " + new UsuarioDAO().GetNameByID(Convert.ToInt32(userID)) + ". </div></br>";
            litCompartidoEntrevista.Visible = true;
		}

		void btnCompartirCon_Click(object sender, EventArgs e)
		{
			int type = Convert.ToInt32(this.hiddenType.Value);
			string userID = ddlCompartirCon.SelectedValue;

			CompromisoDAO compromiso = new CompromisoDAO() { TipoCompromiso = type, UsuarioResponsable = Convert.ToInt32(userID) };
			ListCompartirCon.Add(compromiso);
			Session["ListCompartidoCon"] = ListCompartirCon;
			ddlCompartirCon.Items.Remove(ddlCompartirCon.SelectedItem);

            litCompartidosCompromisos.Text += "<div class='compratido-con-user'>- " + new UsuarioDAO().GetNameByID(Convert.ToInt32(userID)) + ". </div></br>";
            litCompartidosCompromisos.Visible = true;
		}

		void btnGenerarEntrevista_Click(object sender, EventArgs e)
		{
			EntrevistaDAO newEntrevista = new EntrevistaDAO();
            if(ddlContactoComprador.SelectedValue != "-- Seleccione un Contacto --")
			    newEntrevista.ContactoComprador = Convert.ToInt32(ddlContactoComprador.SelectedValue);
			
            newEntrevista.ContactoVendedor = Convert.ToInt32(ddlContactoVendedor.SelectedValue);
			newEntrevista.Hora = Convert.ToDateTime(txtFechaHoraEntrevista.Value);
			int entrevistaID = newEntrevista.Create(Convert.ToInt32(Session["CurrentUserID"]));

			NotificationDAO notificacion = new NotificationDAO();

			notificacion.Mensaje = string.Format("Generó entrevista entre {0} y {1}",
								new ContactoDAO().GetNameByID(newEntrevista.ContactoComprador),
								new ContactoDAO().GetNameByID(newEntrevista.ContactoVendedor));

			List<AsignacionesDAO> AsignacionesList = AsignacionesDAO.getAllByContactID(newEntrevista.ContactoComprador);
			AsignacionesList.AddRange(AsignacionesDAO.getAllByContactID(newEntrevista.ContactoVendedor));

			foreach (var item in AsignacionesList)
			{
				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), item.Usuario);
			}

			List<CompromisoDAO> ListCompromisosCompartidos = (List<CompromisoDAO>)Session["ListCompartirConEntrevista"];
			foreach (var compromiso in ListCompromisosCompartidos)
			{
				compromiso.Compartir(compromiso.UsuarioResponsable, entrevistaID, compromiso.TipoCompromiso);
			}

			Response.Redirect("/contacts/contact.aspx?ContactID=" + ddlContactoVendedor.SelectedValue);
		}

		void btnGenerarCompromiso_Click(object sender, EventArgs e)
		{
			CompromisoDAO newCompromiso = new CompromisoDAO();
			newCompromiso.TipoCompromiso = Convert.ToInt32(ddlTipoCompromiso.SelectedValue);
			newCompromiso.FechaCompromiso = Convert.ToDateTime(txtFechaHoraCompromiso.Value);
			newCompromiso.UsuarioResponsable = Convert.ToInt32(Session["CurrentUserID"]);
			newCompromiso.ContactoAsociado = Convert.ToInt32(ddlContactoCompromiso.SelectedValue);

            if (ddlContactoCompromiso2.SelectedValue != "-- Seleccione un Contacto --")
			    newCompromiso.ContactoAsociado2 = Convert.ToInt32(ddlContactoCompromiso2.SelectedValue); 

			newCompromiso.Estado = 1;
			int compromisoId = newCompromiso.Create();

			NotificationDAO notificacion = new NotificationDAO();

			notificacion.Mensaje = string.Format("Se genero {0} al contacto {1}.",
								new TipoCompromisoDAO().GetCompromisoDisplayByTipoID(Convert.ToInt32(ddlTipoCompromiso.SelectedValue)),
								new ContactoDAO().GetNameByID(newCompromiso.ContactoAsociado));

			List<AsignacionesDAO> AsignacionesList = AsignacionesDAO.getAllByContactID(newCompromiso.ContactoAsociado);

			foreach (var item in AsignacionesList)
			{
				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), item.Usuario);
			}

			List<CompromisoDAO> ListCompromisosCompartidos = (List<CompromisoDAO>)Session["ListCompartidoCon"];
			foreach (var compromiso in ListCompromisosCompartidos)
			{
				compromiso.Compartir(compromiso.UsuarioResponsable, compromisoId, compromiso.TipoCompromiso);
			}

			Response.Redirect("/contacts/contact.aspx?ContactID=" + ddlContactoCompromiso.SelectedValue);
		}

		private void fillDropDowns()
		{
			//Fill ddlTipoCompromiso
			ddlTipoCompromiso.DataSource = new TipoCompromisoDAO().GetAllByRol((Int32)Session["CurrentRolID"]).OrderBy(x => x.TipoCompromiso);;
			ddlTipoCompromiso.DataValueField = "TipoCompromisoID";
			ddlTipoCompromiso.DataTextField = "TipoCompromiso";
			ddlTipoCompromiso.DataBind();
			ddlTipoCompromiso.Items.Insert(0, "-- Seleccione un Tipo de Compromiso --");


			//Fill ddlContactoComprador
            ddlContactoComprador.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoComprador.DataValueField = "ContactoID";
			ddlContactoComprador.DataTextField = "FullName";
			ddlContactoComprador.DataBind();
			ddlContactoComprador.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoVendedor.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoVendedor.DataValueField = "ContactoID";
			ddlContactoVendedor.DataTextField = "FullName";
			ddlContactoVendedor.DataBind();
			ddlContactoVendedor.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoCompromiso.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoCompromiso.DataValueField = "ContactoID";
			ddlContactoCompromiso.DataTextField = "FullName";
			ddlContactoCompromiso.DataBind();
			ddlContactoCompromiso.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoCompromiso2.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoCompromiso2.DataValueField = "ContactoID";
			ddlContactoCompromiso2.DataTextField = "FullName";
			ddlContactoCompromiso2.DataBind();
			ddlContactoCompromiso2.Items.Insert(0, "-- Seleccione un Contacto --");
			

			//Fill ddlCompartirCon
			ddlCompartirCon.DataSource = UsuarioDAO.getAll().OrderBy(x => x.FullName);
			ddlCompartirCon.DataValueField = "UsuarioID";
			ddlCompartirCon.DataTextField = "FullName";
			ddlCompartirCon.DataBind();
			ddlCompartirCon.Items.Insert(0, "-- Seleccione un Usuario --");

			//Fill ddlCompartirCon
            ddlCompartirConEntrevista.DataSource = UsuarioDAO.getAll().OrderBy(x => x.FullName);
			ddlCompartirConEntrevista.DataValueField = "UsuarioID";
			ddlCompartirConEntrevista.DataTextField = "FullName";
			ddlCompartirConEntrevista.DataBind();
			ddlCompartirConEntrevista.Items.Insert(0, "-- Seleccione un Usuario --");
		}
	}
}